import { insertCart, findCartList, deleteCart, updateCart, checkAllCart } from '@/api/cart'
export default {
  namespaced: true,
  state() {
    return {
      cartList: []
    }
  },
  getters: {
    allCount(state) {
      let total = 0
      state.cartList.forEach(item => {
        total += item.count
      })
      return total
    },
    // 商品总价格
    allPrice(state) {
      let total = 0
      state.cartList.forEach(item => {
        total += item.count * item.price
      })
      return total
    },
    // 选中的数量
    // 选中的数量
    selectedCount(state) {
      return state.cartList.filter(item => item.selected).reduce((acc, cur) => {
        return acc + cur.count
      }, 0)
    },
    // 选中的价格
    selectedPrice(state) {
      return state.cartList.filter(item => item.selected).reduce((acc, cur) => {
        return acc + cur.count * cur.price
      }, 0)
    }
  },
  mutations: {
    setCartList(state, payload) {
      state.cartList = payload
    }
  },
  actions: {
    // 删除购物车
    async asyncDelCart(context, skuIds) {
      console.log('skuIds', skuIds)
      // 1、调用接口，删除到购物车
      console.log('deleteCart', skuIds)
      await deleteCart(skuIds)
      // 2、重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3、更新state
      context.commit('setCartList', res.result)
    },
    async asyncSetCartList(context, payload) {
      // 1. 调用接口，添加到购物车
      console.log('asyncSetCartList', payload)
      await insertCart(payload)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 同步一次购物车
    async asyncUpdate(context) {
      // 1、重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 2、更新state
      context.commit('setCartList', res.result)
    },
    // 更新购物车中商品的选中的状态
    async asyncSingleCheck(context, goods) {
      // 1. 调用接口，修改商品的状态
      await updateCart(goods)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    async asyncAllCheck(context, selected) {
      // 在action中如何拿状态？context.state.cartList
      console.log('调用接口', context.state.cartList, selected)
      const ids = context.state.cartList.map(it => it.skuId)
      // 1. 调用接口，修改所有商品的选中状态
      await checkAllCart({ selected, ids })

      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 更新购物车中商品的数量
    async asyncChangeCount(context, goods) {
      // 1. 调用接口，修改商品的数量
      await updateCart(goods)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    }
  }
}
